package com.ywyself.controller.admin;

import com.jfinal.core.ActionKey;
import com.ywyself.common.pool.DataLoad;
import com.ywyself.controller.SessManager;
import com.ywyself.controller.base.YsController;
import com.ywyself.ext.kit.YsKit;
import com.ywyself.ext.utils.YsStringUtils;
import com.ywyself.model.User;
import com.ywyself.service.UserService;

/**
 * 个人信息设置
 *
 * @author YuWenYue
 * @date 2017年10月21日 下午9:01:51
 */
public class UserController extends YsController {

    @ActionKey(ADMIN_ROOT + "/user")
    public void index() {
        forwardAction(ADMIN_ROOT + "/user/info");
    }

    /**
     * 用户信息
     */
    @ActionKey(ADMIN_ROOT + "/user/info")
    public void info() {
        setPageTitle("用户信息设置");
        // 查询用户角色
        User thisUser = SessManager.getSession(this);
        setAttr("tab", "user_info");
        render(BACK_STAGE + "/user/info.html");
    }

    /**
     * 用户信息 - 保存
     */
    @ActionKey(ADMIN_ROOT + "/user/info/save")
    public void infoSave() {
        // 用户昵称
        String nickName = getPara("nick_name");
        // 用户头像
        String icon = getPara("user_icon");
        // 性别
        String gender = getPara("gender");
        // 邮箱地址
        String email = getPara("email");
        User u = (User) SessManager.getSession(this);
        YsKit retUpdate = UserService.EXC.updateInfo(u.getId(), nickName, icon, gender, email);
        if (retUpdate.isOk()) {
            // 重新缓存user数据
            DataLoad.loadUser(u.getId(), this);
        }
        retUpdate.render(this);
    }

    /**
     * 安全设置
     */
    @ActionKey(ADMIN_ROOT + "/user/security")
    public void security() {
        setPageTitle("账户安全设置");
        setAttr("tab", "user_security");
        render(BACK_STAGE + "/user/security.html");
    }

    /**
     * 安全设置 - 保存
     */
    @ActionKey(ADMIN_ROOT + "/user/security/save")
    public void security_save() {
        String user_name_old = getPara("user_name_old");
        String user_pass_old = getPara("user_pass_old");
        String user_name = getPara("user_name");
        String user_pass = getPara("user_pass");
        String user_pass_confirm = getPara("user_pass_confirm");
        if (YsStringUtils.isEmpty(user_name_old)) {
            YsKit.fail().code("300").msg("请输入用户名").render(this);
        } else if (YsStringUtils.isEmpty(user_pass_old)) {
            YsKit.fail().code("300").msg("请输入登录密码").render(this);
        } else if (YsStringUtils.isEmpty(user_name)) {
            YsKit.fail().code("300").msg("请输入新用户名").render(this);
        } else if (YsStringUtils.isEmpty(user_pass)) {
            YsKit.fail().code("300").msg("请输入新密码").render(this);
        } else if (!YsStringUtils.isEqual(user_pass, user_pass_confirm)) {
            YsKit.fail().code("400").msg("两次输入的新密码不一致").render(this);
        } else {
            // 用户认证
            YsKit retAuth = UserService.EXC.doAuth(user_name_old, user_pass_old);
            if (retAuth.isOk()) {
                /**
                 * 如果通过账号密码认证
                 */
                // 修改账号密码
                User user = retAuth.getData();
                /**
                 * 新用户名检查
                 */
                YsKit retCheck = UserService.EXC.getByUserName(user_name);
                boolean isUserNameExist = false;
                if (retCheck.isOk()) {
                    /**
                     * 判断该用户是否为自己
                     */
                    User checkUser = retCheck.getData();
                    /**
                     * 这个用户不是自己，则表示该用户名已经被使用
                     */
                    if (user.getId() != checkUser.getId()) {
                        isUserNameExist = true;
                    }
                }
                if (isUserNameExist) {
                    YsKit.fail().code("400").msg("该用户名已经存在").render(this);
                } else {
                    YsKit ret = UserService.EXC.updateSecurity(user.getId(), user_name, user_pass);
                    if (ret.isOk()) {
                        SessManager.removeSession(this);
                        ret.code("101").set("url", ADMIN_ROOT + "/login").render(this);
                    } else {
                        renderJson(ret);
                    }
                }
            } else {
                // 账号密码认证失败
                retAuth.render(this);
            }
        }
    }
}
